<?php
/* ENTORNO */
// es desarrollo?
define ( '_development', true ) ;

/* RUTAS */
/* carpeta core */
define( '_core', _application . 'core' . _slash ) ;

/* carpeta controladores */
define( '_controllers', _application . 'controllers' . _slash ) ;

/* carpeta modelos */
define( '_models', _application . 'models' . _slash ) ;

/* carpeta vistas */
define( '_views', _application . 'views' . _slash ) ;

/* BASE DE DATOS */
define( '_dbhost', 'localhost' ) ; 
define( '_dbuser', 'root' ) ;
define( '_dbpass', '' ) ;
define( '_dbname', 'mvc' ) ;

/* FUNCIONES */
/* autoloader */
function __autoload( $className )
{
	if( file_exists( ( $className ) ) )
	{
		require_once( ( $className ) ) ;
	} 
	else if( file_exists( _configs . ( $className ) . '.class.php' ) )
	{
		require_once( _configs . ( $className ) . '.class.php' ) ;
	}
	else if( file_exists( _core . ( $className ) . '.class.php' ) )
	{
		require_once( _core . ( $className ) . '.class.php' ) ;
	} 
	else if( file_exists( _controllers . ( $className ) . '.class.php' ) )
	{
		require_once( _controllers . ( $className ) . '.class.php' ) ;
	} 
	else if( file_exists( _models . ( $className ) . '.class.php' ) )
	{
		require_once( _models . ( $className ) . '.class.php' ) ;
	} 
	else
	{
		/* error */ 
		outputError( "autoload error: <b>$className</b> ( " . _core . strtolower( $className ) . '.class.php )', __FILE__, __LINE__ ) ;
	}
}

/** limpiar todo lo que recibo para evitar injeccion **/
function stripSlashesDeep( $value )
{
	$value = is_array( $value ) ? array_map( 'stripSlashesDeep', $value ) : stripslashes( $value ) ;
	return $value ;
}
function removeMagicQuotes() {
	if( get_magic_quotes_gpc() )
	{
		$_GET    = stripSlashesDeep( $_GET    ) ;
		$_POST   = stripSlashesDeep( $_POST   ) ;
		$_COOKIE = stripSlashesDeep( $_COOKIE ) ;
	}
}

/* reporte de errores para desarrollo */
function setReporting()
{
	if( _development )
	{
		error_reporting( E_ALL ) ;
		ini_set( 'display_errors', 'On' ) ;
	}
	else
	{
		error_reporting( E_ALL ) ;
		ini_set( 'display_errors', 'Off' ) ;
	}
}

function outputError( $error, $file, $line ){
	if( _development )
	{
		echo '<br />' . $error . ' in <b>' .  $file . '</b> on line <b>' . $line . '</b><br />' ;
	}
}

/* nuevo registry */
$registry = new registry ;

/* limpieza de variables de usuario*/
removeMagicQuotes() ;

/* reportes de errores segun entorno */
setReporting() ; 

/* cargo front controller */
frontController::main() ;